const weakSet = new WeakSet();

// 区别一：只能存放对象类型
// TypeError: Invalid value used in weak set
// weakSet.add(10);

// 区别二：对对象是一个弱引用
let obj = {
  name: "frank",
};

weakSet.add(obj);

const set = new Set();

// 建立的事强引用
set.add(obj);

// 建立的是弱引用
weakSet.add(obj);

// 3.WeakSet的应用场景
const personSet = new WeakSet();
class Person {
  constructor() {
    personSet.add(this);
  }

  running() {
    if (!personSet.has(this)) {
      throw new Error("不能通过非构造方法创建出来的对象调用running方法");
    }
    console.log("running~", this);
  }
}

let p = new Person();
p.running();
p = null;

// p.running.call({ name: "frank" });
